<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>javascript 阶段</title>
</head>
<body>


    <script>
        // 函数作用域链
        // var a = 100;
        // console.log(a);


        var num = 100;
        // 嵌套函数
        var f1 = function(){// 函数作用域1
            var num = 99;
            var f2 = function(){// 函数作用域2
                var num = 98;
                var f3 = function() { // 函数作用域3
                    console.log(num);// num 的值 ? undefined
                    var num = 97;
                    // console.log(num);// num 的值 ? 97
                }
                f3();
            }
            f2()
        }
        f1()

        // 取值,首先看当前函数作用域,是否存在指定的变量,如果有直接取值(就近原则)
        // 如果当前作用域没有值,那么就会往上一级作用域取检索(查找)变量
        // 如果每一个作用域都没有这个变量(包括window)都找不到这个变量,那么就报错

        // 函数作用域链:
            // 嵌套关系的函数作用域所形成的链式结构



    </script>
</body>
</html>